//#include<bits/stdc++.h> 
//
//using namespace std;
//int n;
//vector<string> vs;
//int ans;
//int m, s;
//int main( )
//{
//    cin >> n;
//    for(int i = 0; i < n; i++)
//    {
//        string str;
//        cin >> str;
//        int cnt1 = 0, cnt2 = 0;
//        for(int i = 0; i < str.size(); i++)
//        {
//            if(str[i] == '1') cnt1 ++;
//            else break;
//        }
//        for(int i = str.size() - 1; i >= 0; i--)
//        {
//            if(str[i] == '1') cnt2 ++;
//            else break;
//        }
//        int a = max(cnt1, cnt2);
//        int b = min(cnt1, cnt2);
//        if(a > m) 
//		{
//			s = m;
//			m = a;
//		}
//        else if(a <= m && a > s) s = a;
//    }
//    cout << m + s;
//    return 0;
//}


#include<bits/stdc++.h> 
using namespace std;
const int M = 200010;
int e[M], ne[M], h[M], w[M], idx;
int n, m;
void Add(int a, int b)
{
    e[idx] = b;
    ne[idx] = h[a];
    h[a] = idx;
    idx ++;
}
void dfs(int x, int t)
{
    for(int i = h[x]; i != -1; i = ne[i])
    {
        int j = e[i];
        if(w[j] >= t) dfs(j, t);
        else return;
    }
}
int main( )
{
    cin >> n >> m;
    memset(h, -1, sizeof(h));
    for(int i = 1; i <= n; i++) cin >> w[i];
    for(int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        Add(a, b);
    }
    dfs(1, w[1]);
    int sum = 0;
    for(int i = 1; i <= n; i++) sum += w[i];
    cout << sum;
    for(int i = 1; i <= n; i++) cout << w[i] << " ";
    return 0;
}
